package com.weishi.project.training.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.weishi.project.api.ret.TrainingAllDataInfoRet;
import com.weishi.project.api.ret.TrainingDataRet;
import com.weishi.project.api.vo.SportManBestResultVo;
import com.weishi.project.api.vo.TrainingAchievementMaxVo;
import com.weishi.project.api.vo.TrainingAchievementTopVo;
import com.weishi.project.api.vo.TrainingDataVo;
import com.weishi.project.sport.trainingdata.vo.WaterRankingVO;
import com.weishi.project.training.domain.AchievementExcel;
import com.weishi.project.training.domain.TrainingAchievement;

import java.util.List;
import java.util.Map;

/**
 * TrainingAchievementService接口
 */
public interface ITrainingAchievementService extends IService<TrainingAchievement> {

    /**
     * 查询TrainingAchievement列表
     */
    List<TrainingAchievement> selectTrainingAchievementList(TrainingAchievement trainingAchievement);
    List<AchievementExcel> selectTrainingAchievementListExcel(TrainingAchievement trainingAchievement);

    List<TrainingAchievement> selectTrainingAchievementList1(TrainingAchievement trainingAchievement);

    List<Map<String, Object>> qryBestResultSpecialProject(SportManBestResultVo sportManBestResultVo);

    /**
     * 查询某天的训练成绩根据某个训练项目
     */
    TrainingDataRet qryTrainingDataInfoByTrainingDay(int trainingDayId);

    /**
     * 查询某个运动员的训练成绩的训练成绩
     */
    List<Map<String, Object>> qryTrainingDataInfoBySportManId(Map<String, Object> params);

    /**
     * 女子top10排名情况
     * @param params
     * @return
     */
    List<TrainingAchievementTopVo> qryTrainingAchievementTop(Map<String, Object> params);

    List<TrainingAchievementMaxVo> selectTrainingAchievementListByChannelId(int channelId);

    List<Map<String, Object>> selectClassHourBoatType(Integer sportsManId);

    /**
     * 查询不同艇支的训练公里数
     * @param params
     * @return
     */
    List<Map<String, Object>> selectKilometersBoatType(Map<String, Object> params);

    List<TrainingAchievement> trainingAchievementList(Map<String, Object> params);

    /**
     * 更新航道运动员成绩信息 service待定 参数见xml
     * @param trainingAchievement
     */
    void updateTrainingAchievement(TrainingAchievement trainingAchievement);

    /**
     * 删除之前有的成绩信息 添加新的
     */
    void deleteTrainingAchievement(TrainingAchievement trainingAchievement);

    /**
     * 保存成绩 真实成绩 或者说 更新成绩
     */
    void saveTrainingAchievement(TrainingAchievement trainingAchievement);

    String selectSportsmanNameById(int sportsmanId);

    TrainingAllDataInfoRet qryTrainingAchievementDetailedReport(Integer trainingAchievementId, Integer type);

    List<Map<String, Object>> qryDetailedReportByParams(TrainingDataVo trainingDataVo);

    @Override
    boolean updateById(TrainingAchievement entity);


    /**
     * 查询运动员水上专项训练--最好成绩排名
     */
    List<WaterRankingVO> getWaterRankingVO(Integer userId , Integer trainingMode , Integer kilometers , Integer sex , Integer realClassHour);


    /**
     * 查询运动员水上专项训练--根据 运动员名称查询排名
     */
    List<WaterRankingVO> getWaterRankingNameVO(String name , Integer trainingMode , Integer kilometers , Integer sex , Integer realClassHour);


    /**
     * 查询运动员陆上专项训练--最好成绩排名
     */
    List<WaterRankingVO> getWaterRankingVOLU(Integer userId , Integer trainingMode , Integer kilometers , Integer sex , Integer realClassHour);


    /**
     * 查询运动员陆上专项训练--根据 运动员名称查询排名
     */
    List<WaterRankingVO> getWaterRankingNameVOLU(String name , Integer trainingMode , Integer kilometers , Integer sex , Integer realClassHour);


    /**
     * 运动员 -- 今日专项成绩排名 第一次查询
     */
    List<WaterRankingVO> getThisDayRankingVO(Integer groupId , String boatType , Integer trainingDayId , Integer sex , Integer trainingMode , Integer kilometers , Double realClassHour , String firstLevel);


    /**
     * 查询运动员专项训练--根据 运动员名称查询排名 第二次查询
     */
    List<WaterRankingVO> getThisDayRankingVOSS(Integer groupId , String firstLevel , String name , Integer trainingMode , Integer kilometers , Integer sex);


    /**
     * 删除同航道的成绩信息
     * @param id
     */
    void deleteTrainingAchievementByChannelId(Integer id);

    /**
     * 查询不同艇只排名
     * @param params
     * @return
     */
    List<TrainingAchievementTopVo> qryTrainingAchievementTopGroupByBoat(Map<String, Object> params);


    /**
     * 根据成绩表查询今天参加的所有课程 id
     */
    List<Integer> getIdList(Integer userId , String day);



}